package com.cq.hd.task.web.job;

import com.cq.hd.order.api.TbOrderApi;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class OrderTask {

    @Autowired
    private TbOrderApi orderApi;

    // 扫描待支付订单，如果下单时间超过一定时间，则查单，如果没查到则关闭订单，释放库存（对延时消息消费的补救），如果查到，则根据查单状态修改对应状态
    // 每隔1h扫描一次 0 0 */1 * * ?
    @XxlJob("scanWaitePayOrder")
    public void scanWaitePayOrder() {
        log.info("扫描待支付订单=====>开始");
        orderApi.scanWaitePayOrder();
        log.info("扫描待支付订单=====>结束");
    }

    // 扫描支付中订单，如果支付时间超过3分钟，还是支付中，则查单再修改相应的状态
    // 每隔20m扫描一次 0 */20 * * * ?
    @XxlJob("scanPayingOrder")
    public void scanPayingOrder() {
        log.info("扫描支付中订单=====>开始");
        orderApi.scanPayingOrder();
        log.info("扫描支付中订单=====>结束");
    }

    // 扫描待核销、核销中、已核销的订单
    // 每隔1h扫描一次 0 0 */1 * * ?
    @XxlJob("scanEndVerifyOrder")
    public void scanEndVerifyOrder() {
        log.info("扫描活动核销时间已结束订单=====>开始");
        orderApi.scanEndVerifyOrder();
        log.info("扫描活动核销时间已结束订单 订单=====>结束");
    }

    // 扫描处理中的订单结算支付流水记录
    // 每隔10m扫描一次 0 */10 * * * ?
    @XxlJob("scanOrderSettleBill")
    public void scanOrderSettleBill() {
        log.info("扫描处理中的订单结算支付流水记录=====>开始");
        orderApi.scanOrderSettleBill();
        log.info("扫描处理中的订单结算支付流水记录 订单=====>结束");
    }

    // 扫描已核销的订单，更新商家与经纪人，商家与商户之间的统计信息
    // 商家与商户：总订单数，总订单金额，总补贴金额
    // 商家与经纪人：总分销订单数，总分销订单金额，累计结算分销佣金，累计分销总佣金，累计提现佣金
    // 每隔10m扫描一次 0 */10 * * * ?
    @XxlJob("scanVerifiedOrder")
    public void scanVerifiedOrder() {
        log.info("扫描已核销的订单=====>开始");
        orderApi.scanVerifiedOrder();
        log.info("扫描已核销的订单=====>结束");
    }

    /**
     * 扫描已经转账成功的商户本金记录，生成商户本金手续费待转账记录
     * 只执行一次，处理之前转账钱扣除的手续费
     */
    @XxlJob("generateOrderSettleBillFeeTemp")
    public void generateOrderSettleBillFeeTemp() {
        log.info("生成商户本金手续费待转账记录=====>开始");
        orderApi.generateOrderSettleBillFeeTemp();
        log.info("生成商户本金手续费待转账记录=====>结束");
    }

    // 扫描处理中的订单结算手续费支付流水记录
    @XxlJob("scanOrderSettleBillFeeTemp")
    public void scanOrderSettleBillFeeTemp() {
        log.info("扫描处理中的订单结算手续费支付流水记录=====>开始");
        orderApi.scanOrderSettleBillFeeTemp();
        log.info("扫描处理中的订单结算手续费支付流水记录 订单=====>结束");
    }

    @XxlJob("subOrderSettleTask")
    public void subOrderSettleTask() {
        log.info("子单结算任务=====>开始");
        orderApi.subOrderSettleTask();
        log.info("子单结算任务=====>结束");
    }

    // 这个不用了
    @XxlJob("subOrderSettlePointsTask")
    public void subOrderSettlePointsTask() {
        log.info("积分结算=====>开始");
//        orderApi.subOrderSettlePointsTask();
        log.info("积分结算=====>结束");
    }

    @XxlJob("settleUserPointsTask")
    public void settleUserPointsTask() {
        log.info("下单用户积分结算=====>开始");
        orderApi.settleUserPointsTask();
        log.info("下单用户积分结算=====>结束");
    }

    @XxlJob("settleAgentPointsTask")
    public void settleAgentPointsTask() {
        log.info("经纪人积分结算=====>开始");
        orderApi.settleAgentPointsTask();
        log.info("经纪人积分结算=====>结束");
    }
}
